'use strict';
var fs = require('fs');
const path = require('path');
module.exports = {
  success(data) {
    // this 就是 app 对象，在其中可以调用 app 上的其他方法，或访问属性
    return {
      success: true,
      data,
    };
  },
  // 复制文件
  copy(sourceFile, destPath) {
    var readStream = fs.createReadStream(sourceFile);
    var writeStream = fs.createWriteStream(destPath);
    readStream.pipe(writeStream);
  },
  /**
   * 读取路径信息
   * @param {string} filepath 路径
   */
  getStat: async function (filePath) {
    return new Promise((resolve, reject) => {
      fs.stat(filePath, (err, stats) => {
        if (err) {
          resolve(false)
        } else {
          resolve(stats);
        }
      })
    })
  },

  /**
     * 创建路径
     * @param {string} dir 路径
     */
  mkdir: function (dir) {
    return new Promise((resolve, reject) => {
      fs.mkdir(dir, (err) => {
        if (err) {
          resolve(false)
        } else {
          resolve(true)
        }
      })
    })
  },
  dirExists: async function (dir) {
    let isExists = await this.getStat(dir)
    // 如果该路径存在且不是文件，返回 true
    if (isExists && isExists.isDirectory()) {
      return true
    } else if (isExists) {  // 这个路径对应一个文件夹，无法再创建文件了
      return false
    }
    // 如果该路径不存在
    let tempDir = path.parse(dir).dir  //拿到上级路径
    // 递归判断，如果上级路径也不存在，则继续循环执行，直到存在
    let status = await this.dirExists(tempDir)
    let mkdirStatus
    if (status) {
      mkdirStatus = await this.mkdir(dir)
    }
    return mkdirStatus
  },
  // 移动文件
  move(sourceFile, destPath) {
    fs.rename(sourceFile, destPath, function (err) {
      if (err) throw err;
      fs.stat(destPath, function (err, stats) {
        if (err) throw err;
        console.log('stats: ' + JSON.stringify(stats));
      });
    });
  },
};
